<!DOCTYPE HTML>
<html lang="zh-CN" class="sidebar-visible no-js light">
    <head>
        <!-- Book generated using mdBook -->
        <meta charset="UTF-8">
        <title> Section 3.3 - PurpleDragonBookAnswer</title>


        <!-- Custom HTML head -->
        
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta name="description" content="Purple Dragon Book Answer Online Edition">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="theme-color" content="#ffffff" />

        <link rel="icon" href="../../favicon.svg">
        <link rel="shortcut icon" href="../../favicon.png">
        <link rel="stylesheet" href="../../css/variables.css">
        <link rel="stylesheet" href="../../css/general.css">
        <link rel="stylesheet" href="../../css/chrome.css">
        <link rel="stylesheet" href="../../css/print.css" media="print">

        <!-- Fonts -->
        <link rel="stylesheet" href="../../FontAwesome/css/font-awesome.css">
        <link rel="stylesheet" href="../../fonts/fonts.css">

        <!-- Highlight.js Stylesheets -->
        <link rel="stylesheet" href="../../highlight.css">
        <link rel="stylesheet" href="../../tomorrow-night.css">
        <link rel="stylesheet" href="../../ayu-highlight.css">

        <!-- Custom theme stylesheets -->

    </head>
    <body>
        <!-- Provide site root to javascript -->
        <script type="text/javascript">
            var path_to_root = "../../";
            var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
        </script>

        <!-- Work around some values being stored in localStorage wrapped in quotes -->
        <script type="text/javascript">
            try {
                var theme = localStorage.getItem('mdbook-theme');
                var sidebar = localStorage.getItem('mdbook-sidebar');

                if (theme.startsWith('"') && theme.endsWith('"')) {
                    localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
                }

                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
                }
            } catch (e) { }
        </script>

        <!-- Set the theme before any content is loaded, prevents flash -->
        <script type="text/javascript">
            var theme;
            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
            if (theme === null || theme === undefined) { theme = default_theme; }
            var html = document.querySelector('html');
            html.classList.remove('no-js')
            html.classList.remove('light')
            html.classList.add(theme);
            html.classList.add('js');
        </script>

        <!-- Hide / unhide sidebar before it is displayed -->
        <script type="text/javascript">
            var html = document.querySelector('html');
            var sidebar = 'hidden';
            if (document.body.clientWidth >= 1080) {
                try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
                sidebar = sidebar || 'visible';
            }
            html.classList.remove('sidebar-visible');
            html.classList.add("sidebar-" + sidebar);
        </script>

        <nav id="sidebar" class="sidebar" aria-label="Table of contents">
            <div class="sidebar-scrollbox">
                <ol class="chapter"><li class="chapter-item expanded "><a href="../../preface.html"><strong aria-hidden="true">1.</strong> Preface</a></li><li class="chapter-item expanded "><a href="../../ch01/ch01.html"><strong aria-hidden="true">2.</strong> Chapter 1</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch01/1.1/1.1.html"><strong aria-hidden="true">2.1.</strong> Section 1.1</a></li><li class="chapter-item expanded "><a href="../../ch01/1.3/1.3.html"><strong aria-hidden="true">2.2.</strong> Section 1.3</a></li><li class="chapter-item expanded "><a href="../../ch01/1.6/1.6.html"><strong aria-hidden="true">2.3.</strong> Section 1.6</a></li></ol></li><li class="chapter-item expanded "><a href="../../ch02/ch02.html"><strong aria-hidden="true">3.</strong> Chapter 2</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch02/key-point/key-point.html"><strong aria-hidden="true">3.1.</strong> KeyPoints</a></li><li class="chapter-item expanded "><a href="../../ch02/2.2/2.2.html"><strong aria-hidden="true">3.2.</strong> Section 2.2</a></li><li class="chapter-item expanded "><a href="../../ch02/2.3/2.3.html"><strong aria-hidden="true">3.3.</strong> Section 2.3</a></li><li class="chapter-item expanded "><a href="../../ch02/2.4/2.4.html"><strong aria-hidden="true">3.4.</strong> Section 2.4</a></li><li class="chapter-item expanded "><a href="../../ch02/2.6/2.6.html"><strong aria-hidden="true">3.5.</strong> Section 2.6</a></li><li class="chapter-item expanded "><a href="../../ch02/2.8/2.8.html"><strong aria-hidden="true">3.6.</strong> Section 2.8</a></li></ol></li><li class="chapter-item expanded "><a href="../../ch03/ch03.html"><strong aria-hidden="true">4.</strong> Chapter 3</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch03/key-point/key-point.html"><strong aria-hidden="true">4.1.</strong> KeyPoints</a></li><li class="chapter-item expanded "><a href="../../ch03/3.1/3.1.html"><strong aria-hidden="true">4.2.</strong> Section 3.1</a></li><li class="chapter-item expanded "><a href="../../ch03/3.3/3.3.html" class="active"><strong aria-hidden="true">4.3.</strong> Section 3.3</a></li><li class="chapter-item expanded "><a href="../../ch03/3.4/3.4.html"><strong aria-hidden="true">4.4.</strong> Section 3.4</a></li><li class="chapter-item expanded "><a href="../../ch03/3.5/3.5.html"><strong aria-hidden="true">4.5.</strong> Section 3.5</a></li><li class="chapter-item expanded "><a href="../../ch03/3.6/3.6.html"><strong aria-hidden="true">4.6.</strong> Section 3.6</a></li><li class="chapter-item expanded "><a href="../../ch03/3.7/3.7.html"><strong aria-hidden="true">4.7.</strong> Section 3.7</a></li><li class="chapter-item expanded "><a href="../../ch03/3.8/3.8.html"><strong aria-hidden="true">4.8.</strong> Section 3.8</a></li><li class="chapter-item expanded "><a href="../../ch03/3.9/3.9.html"><strong aria-hidden="true">4.9.</strong> Section 3.9</a></li></ol></li><li class="chapter-item expanded "><a href="../../ch04/ch04.html"><strong aria-hidden="true">5.</strong> Chapter 4</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch04/key-point/key-point.html"><strong aria-hidden="true">5.1.</strong> KeyPoints</a></li><li class="chapter-item expanded "><a href="../../ch04/4.2/4.2.html"><strong aria-hidden="true">5.2.</strong> Section 4.2</a></li><li class="chapter-item expanded "><a href="../../ch04/4.3/4.3.html"><strong aria-hidden="true">5.3.</strong> Section 4.3</a></li><li class="chapter-item expanded "><a href="../../ch04/4.4/4.4.html"><strong aria-hidden="true">5.4.</strong> Section 4.4</a></li><li class="chapter-item expanded "><a href="../../ch04/4.5/4.5.html"><strong aria-hidden="true">5.5.</strong> Section 4.5</a></li><li class="chapter-item expanded "><a href="../../ch04/4.6/4.6.html"><strong aria-hidden="true">5.6.</strong> Section 4.6</a></li><li class="chapter-item expanded "><a href="../../ch04/4.7/4.7.html"><strong aria-hidden="true">5.7.</strong> Section 4.7</a></li></ol></li><li class="chapter-item expanded "><a href="../../ch05/ch05.html"><strong aria-hidden="true">6.</strong> Chapter 5</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch05/5.1/5.1.html"><strong aria-hidden="true">6.1.</strong> Section 5.1</a></li><li class="chapter-item expanded "><a href="../../ch05/5.2/5.2.html"><strong aria-hidden="true">6.2.</strong> Section 5.2</a></li><li class="chapter-item expanded "><a href="../../ch05/5.3/5.3.html"><strong aria-hidden="true">6.3.</strong> Section 5.3</a></li><li class="chapter-item expanded "><a href="../../ch05/5.4/5.4.html"><strong aria-hidden="true">6.4.</strong> Section 5.4</a></li><li class="chapter-item expanded "><a href="../../ch05/5.5/5.5.html"><strong aria-hidden="true">6.5.</strong> Section 5.5</a></li></ol></li><li class="chapter-item expanded "><a href="../../ch06/ch06.html"><strong aria-hidden="true">7.</strong> Chapter 6</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch06/6.1/6.1.html"><strong aria-hidden="true">7.1.</strong> Section 6.1</a></li><li class="chapter-item expanded "><a href="../../ch06/6.2/6.2.html"><strong aria-hidden="true">7.2.</strong> Section 6.2</a></li><li class="chapter-item expanded "><a href="../../ch06/6.3/6.3.html"><strong aria-hidden="true">7.3.</strong> Section 6.3</a></li><li class="chapter-item expanded "><a href="../../ch06/6.4/6.4.html"><strong aria-hidden="true">7.4.</strong> Section 6.4</a></li><li class="chapter-item expanded "><a href="../../ch06/6.5/6.5.html"><strong aria-hidden="true">7.5.</strong> Section 6.5</a></li><li class="chapter-item expanded "><a href="../../ch06/6.6/6.6.html"><strong aria-hidden="true">7.6.</strong> Section 6.6</a></li><li class="chapter-item expanded "><a href="../../ch06/6.7/6.7.html"><strong aria-hidden="true">7.7.</strong> Section 6.7</a></li></ol></li><li class="chapter-item expanded "><a href="../../ch07/ch07.html"><strong aria-hidden="true">8.</strong> Chapter 7</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch07/7.2/7.2.html"><strong aria-hidden="true">8.1.</strong> Section 7.2</a></li><li class="chapter-item expanded "><a href="../../ch07/7.3/7.3.html"><strong aria-hidden="true">8.2.</strong> Section 7.3</a></li><li class="chapter-item expanded "><a href="../../ch07/7.3/7.4.html"><strong aria-hidden="true">8.3.</strong> Section 7.4</a></li><li class="chapter-item expanded "><a href="../../ch07/7.5/7.5.html"><strong aria-hidden="true">8.4.</strong> Section 7.5</a></li><li class="chapter-item expanded "><a href="../../ch07/7.6/7.6.html"><strong aria-hidden="true">8.5.</strong> Section 7.6</a></li><li class="chapter-item expanded "><a href="../../ch07/7.7/7.7.html"><strong aria-hidden="true">8.6.</strong> Section 7.7</a></li></ol></li><li class="chapter-item expanded "><a href="../../ch08/ch08.html"><strong aria-hidden="true">9.</strong> Chapter 8</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../ch08/8.2/8.2.html"><strong aria-hidden="true">9.1.</strong> Section 8.2</a></li><li class="chapter-item expanded "><a href="../../ch08/8.3/8.3.html"><strong aria-hidden="true">9.2.</strong> Section 8.3</a></li><li class="chapter-item expanded "><a href="../../ch08/8.4/8.4.html"><strong aria-hidden="true">9.3.</strong> Section 8.4</a></li><li class="chapter-item expanded "><a href="../../ch08/8.5/8.5.html"><strong aria-hidden="true">9.4.</strong> Section 8.5</a></li></ol></li></ol>
            </div>
            <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
        </nav>

        <div id="page-wrapper" class="page-wrapper">

            <div class="page">
                                <div id="menu-bar-hover-placeholder"></div>
                <div id="menu-bar" class="menu-bar sticky bordered">
                    <div class="left-buttons">
                        <button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
                            <i class="fa fa-bars"></i>
                        </button>
                        <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
                            <i class="fa fa-paint-brush"></i>
                        </button>
                        <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
                            <li role="none"><button role="menuitem" class="theme" id="light">Light (default)</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
                        </ul>
                        <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
                            <i class="fa fa-search"></i>
                        </button>
                    </div>

                    <h1 class="menu-title">PurpleDragonBookAnswer</h1>

                    <div class="right-buttons">
                        <a href="../../print.html" title="Print this book" aria-label="Print this book">
                            <i id="print-button" class="fa fa-print"></i>
                        </a>

                    </div>
                </div>

                <div id="search-wrapper" class="hidden">
                    <form id="searchbar-outer" class="searchbar-outer">
                        <input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
                    </form>
                    <div id="searchresults-outer" class="searchresults-outer hidden">
                        <div id="searchresults-header" class="searchresults-header"></div>
                        <ul id="searchresults">
                        </ul>
                    </div>
                </div>

                <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
                <script type="text/javascript">
                    document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
                    document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
                    Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
                        link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
                    });
                </script>

                <div id="content" class="content">
                    <main>
                        <h1 id="exercises-for-section-33"><a class="header" href="#exercises-for-section-33">Exercises for Section 3.3</a></h1>
<h3 id="331"><a class="header" href="#331">3.3.1</a></h3>
<p>Consult the language reference manuals to determine</p>
<ol>
<li>the sets of characters that form the input alphabet (excluding those that may only appear in character strings or comments)</li>
<li>the lexical form of numerical constants, and</li>
<li>the lexical form of identifiers, </li>
</ol>
<p>for each of the following languages:</p>
<ol>
<li>C</li>
<li>C++</li>
<li>C#</li>
<li>Fortran</li>
<li>Java</li>
<li>Lisp</li>
<li>SQL</li>
</ol>
<h3 id="332"><a class="header" href="#332">3.3.2</a></h3>
<p>Describe the languages denoted by the following regular expressions:</p>
<ol>
<li>a(a|b)*a</li>
<li>((ε|a)b*)*</li>
<li>(a|b)*a(a|b)(a|b)</li>
<li>a*ba*ba*ba*</li>
<li>!! (aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*</li>
</ol>
<h4 id="answer"><a class="header" href="#answer">Answer</a></h4>
<ol>
<li>String of a's and b's that start and end with a.</li>
<li>String of a's and b's.</li>
<li>String of a's and b's that the character third from the last is a.</li>
<li>String of a's and b's that only contains three b.</li>
<li>String of a's and b's that has a even number of a and b.</li>
</ol>
<h3 id="333"><a class="header" href="#333">3.3.3</a></h3>
<p>In a string of length n, how many of the following are there?</p>
<ol>
<li>Prefixes.</li>
<li>Suffixes.</li>
<li>Proper prefixes.</li>
<li>! Substrings.</li>
<li>! Subsequences.</li>
</ol>
<h4 id="answer-1"><a class="header" href="#answer-1">Answer</a></h4>
<ol>
<li>n + 1</li>
<li>n + 1</li>
<li>n - 1</li>
<li>C(n+1,2) + 1 (need to count epsilon in)</li>
<li>Σ(i=0,n) C(n, i)</li>
</ol>
<h3 id="334"><a class="header" href="#334">3.3.4</a></h3>
<p>Most languages are case sensitive, so keywords can be written only one way, and the regular expressions describing their lexeme is very simple. However, some languages, like SQL, are case insensitive, so a keyword can be written either in lowercase or in uppercase, or in any mixture of cases. Thus, the SQL keyword SELECT can also be written select, Select, or sElEcT, for instance. Show how to write a regular expression for a keyword in a case­ insensitive language. Illustrate the idea by writing the expression for &quot;select&quot; in SQL.</p>
<h4 id="answer-2"><a class="header" href="#answer-2">Answer</a></h4>
<pre><code>select -&gt; [Ss][Ee][Ll][Ee][Cc][Tt]
</code></pre>
<h3 id="335"><a class="header" href="#335">3.3.5</a></h3>
<p>！Write regular definitions for the following languages:</p>
<ol>
<li>All strings of lowercase letters that contain the five vowels in order.</li>
<li>All strings of lowercase letters in which the letters are in ascending lexicographic order.</li>
<li>Comments, consisting of a string surrounded by /* and */, without an intervening */, unless it is inside double-quotes (&quot;)</li>
<li>!! All strings of digits with no repeated digits. Hint: Try this problem first with a few digits, such as {O, 1, 2}.</li>
<li>!! All strings of digits with at most one repeated digit.</li>
<li>!! All strings of a's and b's with an even number of a's and an odd number
of b's.</li>
<li>The set of Chess moves,in the informal notation,such as p-k4 or kbp*qn.</li>
<li>!! All strings of a's and b's that do not contain the substring abb.</li>
<li>All strings of a's and b's that do not contain the subsequence abb.</li>
</ol>
<h4 id="answer-3"><a class="header" href="#answer-3">Answer</a></h4>
<p>1、</p>
<pre><code>want -&gt; other* a (other|a)* e (other|e)* i (other|i)* o (other|o)* u (other|u)*
other -&gt; [bcdfghjklmnpqrstvwxyz]
</code></pre>
<p>2、</p>
<pre><code>a* b* ... z*
</code></pre>
<p>3、</p>
<pre><code>\/\*([^*&quot;]*|&quot;.*&quot;|\*+[^/])*\*\/
</code></pre>
<p>4、</p>
<pre><code>want -&gt; 0|A?0?1(A0?1|01)*A?0?|A0?
A -&gt; 0?2(02)*
</code></pre>
<p>Steps:</p>
<p>step1. NFA</p>
<p><img src="./assets/3.3.5-4.gif" alt="Transition diagram" /></p>
<p>step2. GNFA</p>
<p><img src="./assets/3.3.5-4-1.gif" alt="GNFA" /></p>
<p>step3. Remove node 0 and simplify</p>
<p><img src="./assets/3.3.5-4-2.gif" alt="Remove node 0 and simplify" /></p>
<p>step4. Remove node 2 and simplify</p>
<p><img src="./assets/3.3.5-4-3.gif" alt="Remove node 2 and simplify" /></p>
<p>step5. Remove node 1 and simplify</p>
<p><img src="./assets/3.3.5-4-4.gif" alt="Remove node 1 and simplify" /></p>
<p>6、</p>
<pre><code>want -&gt; (FE*G|(aa)*b)(E|FE*G)
E -&gt; b(aa)*b
F -&gt; a(aa)*b
G -&gt; b(aa)*ab|a
F -&gt; ba(aa)*b
</code></pre>
<p>Steps:</p>
<p>step1. Transition diagram</p>
<p><img src="./assets/3.3.5-5.gif" alt="转换图" /></p>
<p>step2. GNFA</p>
<p><img src="./assets/3.3.5-5-1.gif" alt="GNFA" /></p>
<p>step3. Remove node A and simplify</p>
<p><img src="./assets/3.3.5-5-2.gif" alt="Remove node A and simplify" /></p>
<p>step4. Remove node D and simplify</p>
<p><img src="./assets/3.3.5-5-3.gif" alt="Remove node D and simplify" /></p>
<p>step5. Remove node C and simplify</p>
<p><img src="./assets/3.3.5-5-4.gif" alt="Remove node C and simplify" /></p>
<p>8、</p>
<pre><code>b*(a+b?)*
</code></pre>
<p>9、</p>
<pre><code>b* | b*a+ | b*a+ba*
</code></pre>
<h3 id="336"><a class="header" href="#336">3.3.6</a></h3>
<p>Write character classes for the following sets of characters:</p>
<ol>
<li>The first ten letters (up to &quot;j&quot;) in either upper or lower case.</li>
<li>The lowercase consonants.</li>
<li>The &quot;digits&quot; in a hexadecimal number (choose either upper or lower case for the &quot;digits&quot; above 9).</li>
<li>The characters that can appear at the end of alegitimate English sentence (e.g. , exclamation point) .</li>
</ol>
<h4 id="answer-4"><a class="header" href="#answer-4">Answer</a></h4>
<ol>
<li>[A-Ja-j]</li>
<li>[bcdfghjklmnpqrstvwxzy]</li>
<li>[0-9a-f]</li>
<li>[.?!]</li>
</ol>
<h3 id="337"><a class="header" href="#337">3.3.7</a></h3>
<p>Note that these regular expressions give all of the following symbols (operator characters) a special meaning:</p>
<pre><code>\ &quot; . ^ $ [ ] * + ? { } | /
</code></pre>
<p>Their special meaning must be turned off if they are needed to represent
themselves in a character string. We can do so by quoting the character within a
string of length one or more; e.g., the regular expression &quot;**&quot; matches the
string ** . We can also get the literal meaning of an operator character by
preceding it by a backslash. Thus, the regular expression \*\* also matches
the string **. Write a regular expression that matches the string &quot;\.</p>
<h4 id="answer-5"><a class="header" href="#answer-5">Answer</a></h4>
<pre><code>\&quot;\\
</code></pre>
<h3 id="339-"><a class="header" href="#339-">3.3.9 !</a></h3>
<p>The regular expression r{m, n} matches from m to n occurrences of the pattern r.
For example, a [ 1 , 5] matches a string of one to five a's. Show that for every
regular expression containing repetition operators of this form, there is an
equivalent regular expression without repetition operators.</p>
<h4 id="answer-6"><a class="header" href="#answer-6">Answer</a></h4>
<p>r{m,n} is equals to r.(m).r | r.(m + 1).r | ... | r.(n).r</p>
<h3 id="3310-"><a class="header" href="#3310-">3.3.10 !</a></h3>
<p>The operator ^ matches the left end of a line, and $ matches the right end of a
line. The operator ^ is also used to introduce complemented character classes,
but the context always makes it clear which meaning is intended. For example,
^<sup class="footnote-reference"><a href="#aeiou">1</a></sup>*$ matches any complete line that does not contain a lowercase vowel.</p>
<ol>
<li>How do you tell which meaning of ^ is intended?</li>
<li>Can you always replace a regular expression using the ^ and $ operators by an equivalent expression that does not use either of these operators?</li>
</ol>
<h4 id="answer-7"><a class="header" href="#answer-7">Answer</a></h4>
<ol>
<li>if ^ is in a pair of brakets, and it is the first letter, it means complemented classes, or it means the left end of a line.</li>
</ol>

                    </main>

                    <nav class="nav-wrapper" aria-label="Page navigation">
                        <!-- Mobile navigation buttons -->
                            <a rel="prev" href="../../ch03/3.1/3.1.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                                <i class="fa fa-angle-left"></i>
                            </a>

                            <a rel="next" href="../../ch03/3.4/3.4.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                                <i class="fa fa-angle-right"></i>
                            </a>

                        <div style="clear: both"></div>
                    </nav>
                </div>
            </div>

            <nav class="nav-wide-wrapper" aria-label="Page navigation">
                    <a rel="prev" href="../../ch03/3.1/3.1.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                        <i class="fa fa-angle-left"></i>
                    </a>

                    <a rel="next" href="../../ch03/3.4/3.4.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                        <i class="fa fa-angle-right"></i>
                    </a>
            </nav>

        </div>




        <script type="text/javascript">
            window.playground_copyable = true;
        </script>


        <script src="../../elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../mark.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../searcher.js" type="text/javascript" charset="utf-8"></script>

        <script src="../../clipboard.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../highlight.js" type="text/javascript" charset="utf-8"></script>
        <script src="../../book.js" type="text/javascript" charset="utf-8"></script>

        <!-- Custom JS scripts -->


    </body>
</html>
